package cn.bonoon.kernel.menus;

import java.util.List;

import cn.bonoon.kernel.menus.layouts.LayoutGenerable;

/**
 * 系统的公共内容
 * 
 * 有：{@link #internalId}
 * 
 * @author jackson
 *
 */
public abstract class AstractModule extends XpathItemable implements ModuleDefinition, ParentContainer{

	/** 平台的描述信息，这个到目前为止，还不知道怎么样利用；如果确认为没什么作用的，则会删掉；子系统的说明或帮助文档  */
	protected DescribeDefinitionImpl describe;
	
	/** 平台定义的样式，如果子系统没有定义样式，或定义的样式中缺少某些项，则该项会使用平台的样式；
	 * 子系统的样式；
	 * 如：系统的logo，如果子系统没有定义自己的logo，则会使用平台的logo作为子系统的logo */
	protected StyleDefinitionImpl style;

	/** 定义一个公共可以访问的路径,如果没有定义,则默认路径为'/' */
	protected String endpoint;
	
	/** 这不是一个可访问的地址；而是，如果下级节点使用的相对路径，则会把这个路径与具体的菜单路径进行组合 */
	protected String path;

	/** 未加密的原始ID */
	protected String internalId;

	/** 在首页工作区域的内容，以tab方式进行展示，应该允许调整样式；
	 * 嵌入平台首页里的模块，参考：{@link ModuleDefinition#getParts()} */
	protected List<PartDefinition> parts;
	
	private final LayoutGenerable index = new LayoutGenerable(){

		@Override
		public String navigation() {
			return DEFAULT_INDEX_NAME;
		}

		@Override
		public String getName() {
			return DEFAULT_INDEX_NAME;
		}
		
	};
	
	public LayoutGenerable getIndex() {
		return index;
	}

	@Override
	public StyleDefinitionImpl getStyle(){
		return style;
	}
	
	@Override
	public DescribeDefinitionImpl getDescribe() {
		return describe;
	}
	
	public final String getEndpoint() {
		return endpoint;
	}
	
	public void setPath(String path) {
		this.path = path;
	}

	public List<PartDefinition> getParts() {
		return parts;
	}

	public void setParts(List<PartDefinition> parts) {
		this.parts = parts;
	}

	public void setStyle(StyleDefinitionImpl style) {
		this.style = style;
	}

	public String getInternalId() {
		return internalId;
	}

	public void setDescribe(DescribeDefinitionImpl des) {
		this.describe = des;
	}

	public String getPath() {
		return path;
	}

	public final String getThumbnail() {
		return style.getThumbnail();
	}
}
